package br.museu.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import br.museu.constantes.ConstantesModelAndView;
import br.museu.model.Usuario;
import br.museu.model.json.JSONRetorno;
import br.museu.model.json.JSONRetorno.JSONStatus;
import br.museu.negocio.interfaces.IUsuarioNegocio;

import com.google.gson.Gson;

@Controller
@Scope("session")
public class UsuarioController {

	@Autowired
	private IUsuarioNegocio usuarioNegocio;

	public UsuarioController() {
	}

	@RequestMapping(value = "/cadastrarUsuario", method = RequestMethod.POST)
	public ModelAndView cadastrarUsuario(@ModelAttribute Usuario usuario, BindingResult result) {
		ModelAndView mv = new ModelAndView(ConstantesModelAndView.home);

		try {
			usuarioNegocio.cadastrarUsuario(usuario);
		} catch (Exception e) {
			mv = new ModelAndView(ConstantesModelAndView.pagina_erro);
			mv.addObject("mensagem", e.getMessage());
		}

		return mv;
	}

	@RequestMapping(value = "/perfilUsuario", method = RequestMethod.GET)
	public ModelAndView perfilUsuario(HttpServletRequest request) {
		ModelAndView mv = new ModelAndView(ConstantesModelAndView.perfilUsuario);

		try {
			Usuario usuario = (Usuario) request.getSession().getAttribute("usuario");
			mv.addObject("usuario", usuario);
		} catch (Exception e) {
			mv = new ModelAndView(ConstantesModelAndView.pagina_erro);
			mv.addObject("mensagem", e.getMessage());
		}

		return mv;
	}

	@RequestMapping(value = "/loginSistema", method = RequestMethod.POST)
	public @ResponseBody String loginSistema(HttpServletRequest request, HttpServletResponse response) {
		JSONRetorno retorno = new JSONRetorno(JSONStatus.sucesso);
		try {

			String login = request.getParameter("login");
			String senha = request.getParameter("senha");

			Usuario usuario = usuarioNegocio.loginUsuario(login, senha);
			request.getSession().setAttribute("usuario", usuario);

		} catch (Exception e) {
			retorno.setStatus(JSONStatus.erro);
			retorno.setMensagem(e.getMessage());
		}

		return new Gson().toJson(retorno);
	}

	@RequestMapping(value = "/atualizarPerfil", method = RequestMethod.POST)
	public @ResponseBody String atualizarPerfil(HttpServletRequest request, HttpServletResponse response) {
		JSONRetorno retorno = new JSONRetorno(JSONStatus.sucesso);
		try {

			String senha = request.getParameter("senha");
			String nome = request.getParameter("nomeCompleto");
			String dtNascimento = request.getParameter("dtNascimento");
			String senhaConfirm = request.getParameter("senhaConfirm");

			Usuario usuario = (Usuario) request.getSession().getAttribute("usuario");

			usuarioNegocio.alterarUsuario(usuario, senha, nome, dtNascimento, senhaConfirm);

		} catch (Exception e) {
			retorno.setStatus(JSONStatus.erro);
			retorno.setMensagem(e.getMessage());
		}

		return new Gson().toJson(retorno);
	}

}
